#!/usr/bin/env python3

import assetmgr
import json
import os
import re
import sys

def main():
    fd = open(sys.argv[1], 'r', encoding='UTF-8')
    data = fd.read()
    fd.close()

    basename = os.path.basename(sys.argv[1]).replace('.json', '')
    shortname = get_shortname(basename)

    rows = json.loads(data)

    if sys.argv[2] == 'en':
        make_header(rows, shortname)

    if '--headers-only' not in sys.argv:
        make_object(rows, basename, sys.argv[2])

def get_shortname(basename):
    return re.match(r'^[a-z0-9]+', basename)[0]

def make_header(rows, shortname):
    typename = 'l_%s' % shortname
    enums = [row['id'] for row in rows]
    filename = 'lang/%s.h' % shortname
    terminator = 'L_%s_END' % shortname.upper()
    start = banks.index(shortname) * 512
    assetmgr.write_enums(typename, enums, filename, terminator, start=start)

def make_object(rows, basename, key):
    binary = make_binary(rows, key)
    zipped = assetmgr.zip(binary)

    suffix = {
        'en': 'E',
        'gb': 'P',
        'jp': 'J',
        'fr': '_str_f',
        'de': '_str_g',
        'it': '_str_i',
        'es': '_str_s',
    }[key]

    filename = 'files/L%s%s.o' % (basename, suffix)
    assetmgr.write_object(zipped, filename)

def make_binary(rows, key):
    if len(rows) == 0:
        return (0).to_bytes(16, 'big')

    output = bytes()
    pos = len([row for row in rows if key in row]) * 4
    strings = []

    for index, row in enumerate(rows):
        if key in row:
            if row[key] is None:
                output += (0).to_bytes(4, 'big')
            else:
                output += pos.to_bytes(4, 'big')

                if os.environ['ROMID'] == 'jpn-final' and key == 'jp':
                    string = encode_jp(row[key])
                else:
                    string = row[key].encode('latin_1')

                strings.append(string)
                pos += assetmgr.align4(len(string) + 1)

    for string in strings:
        output += string
        amount = 4 - (len(string) % 4)
        output += (0).to_bytes(amount, 'big')

    if len(output) % 16:
        amount = 16 - (len(output) % 16)
        output += (0).to_bytes(amount, 'big')

    return output

"""
The input string is UTF-8, and it needs to be re-encoded to a custom encoding.
A lookup array is used for this.

However, some UTF-8 characters appear multiple types with a different encoding.
For duplicates, we store the character in JSON as something like \\habcd where
abcd is the target value in hex.
"""
def encode_jp(string):
    outbytes = bytes()
    i = 0

    while i < len(string):
        if string[i] in jpnchars:
            outbytes += jpnchars[string[i]].to_bytes(2, 'big')
            i += 1;
        else:
            match = re.match(r'^\\h([a-z0-9]{4})', string[i:])

            if match:
                dec = int(match[1], 16)
                outbytes += dec.to_bytes(2, 'big')
                i += 6;
            else:
                outbytes += ord(string[i]).to_bytes(1, 'big')
                i += 1;

    return outbytes

banks = [
    '',
    'ame',
    'arch',
    'ark',
    'ash',
    'azt',
    'cat',
    'cave',
    'arec',
    'crad',
    'cryp',
    'dam',
    'depo',
    'dest',
    'dish',
    'ear',
    'eld',
    'imp',
    'jun',
    'lee',
    'len',
    'lip',
    'lue',
    'oat',
    'pam',
    'pete',
    'ref',
    'rit',
    'run',
    'sevb',
    'sev',
    'sevx',
    'sevxb',
    'sho',
    'silo',
    'stat',
    'tra',
    'wax',
    'gun',
    'title',
    'mpmenu',
    'propobj',
    'mpweapons',
    'options',
    'misc',
    'uff',
    'old',
    'ate',
    'lam',
    'mp1',
    'mp2',
    'mp3',
    'mp4',
    'mp5',
    'mp6',
    'mp7',
    'mp8',
    'mp9',
    'mp10',
    'mp11',
    'mp12',
    'mp13',
    'mp14',
    'mp15',
    'mp16',
    'mp17',
    'mp18',
    'mp19',
    'mp20',
]

jpnchars = {
	'　': 0x8080,
	'、': 0x8081,
	'＄': 0x8082,
	'（': 0x8083,
	'）': 0x8084,
	'・': 0x8085,
	'％': 0x8086,
	'「': 0x8087,
	'」': 0x8088,
	'“': 0x8089,
	'＜': 0x808a,
	'＞': 0x808b,
	'＆': 0x808c,
	'～': 0x808d,
	'…': 0x808e,
	'　': 0x808f,
	'０': 0x8090,
	'１': 0x8091,
	'２': 0x8092,
	'３': 0x8093,
	'４': 0x8094,
	'５': 0x8095,
	'６': 0x8096,
	'７': 0x8097,
	'８': 0x8098,
	'９': 0x8099,
	'Ａ': 0x809a,
	'Ｂ': 0x809b,
	'Ｃ': 0x809c,
	'Ｄ': 0x809d,
	'Ｅ': 0x809e,
	'Ｆ': 0x809f,
	'Ｇ': 0x80a0,
	'Ｈ': 0x80a1,
	'Ｉ': 0x80a2,
	'Ｊ': 0x80a3,
	'Ｋ': 0x80a4,
	'Ｌ': 0x80a5,
	'Ｍ': 0x80a6,
	'Ｎ': 0x80a7,
	'Ｏ': 0x80a8,
	'Ｐ': 0x80a9,
	'Ｑ': 0x80aa,
	'Ｒ': 0x80ab,
	'Ｓ': 0x80ac,
	'Ｔ': 0x80ad,
	'Ｕ': 0x80ae,
	'Ｖ': 0x80af,
	'Ｗ': 0x80b0,
	'Ｘ': 0x80b1,
	'Ｙ': 0x80b2,
	'Ｚ': 0x80b3,
	'！': 0x80b4,
	'”': 0x80b5,
	'＃': 0x80b6,
	'’': 0x80b7,
	'＊': 0x80b8,
	'＋': 0x80b9,
	'，': 0x80ba,
	'－': 0x80bb,
	'．': 0x80bc,
	'／': 0x80bd,
	'：': 0x80be,
	'＝': 0x80bf,
	'？': 0x80c0,
	'＠': 0x80c1,
	'。': 0x80c2,
	'゛': 0x80c3,
	'゜': 0x80c4,
	'ァ': 0x80c5,
	'ィ': 0x80c6,
	'ゥ': 0x80c7,
	'ェ': 0x80c8,
	'ォ': 0x80c9,
	'ッ': 0x80ca,
	'ャ': 0x80cb,
	'ュ': 0x80cc,
	'ョ': 0x80cd,
	'ヲ': 0x80ce,
	'ン': 0x80cf,
	'ア': 0x80d0,
	'イ': 0x80d1,
	'ウ': 0x80d2,
	'エ': 0x80d3,
	'オ': 0x80d4,
	'カ': 0x80d5,
	'キ': 0x80d6,
	'ク': 0x80d7,
	'ケ': 0x80d8,
	'コ': 0x80d9,
	'サ': 0x80da,
	'シ': 0x80db,
	'ス': 0x80dc,
	'セ': 0x80dd,
	'ソ': 0x80de,
	'タ': 0x80df,
	'チ': 0x80e0,
	'ツ': 0x80e1,
	'テ': 0x80e2,
	'ト': 0x80e3,
	'ナ': 0x80e4,
	'ニ': 0x80e5,
	'ヌ': 0x80e6,
	'ネ': 0x80e7,
	'ノ': 0x80e8,
	'ハ': 0x80e9,
	'ヒ': 0x80ea,
	'フ': 0x80eb,
	'ヘ': 0x80ec,
	'ホ': 0x80ed,
	'マ': 0x80ee,
	'ミ': 0x80ef,
	'ム': 0x80f0,
	'メ': 0x80f1,
	'モ': 0x80f2,
	'ヤ': 0x80f3,
	'ユ': 0x80f4,
	'ヨ': 0x80f5,
	'ラ': 0x80f6,
	'リ': 0x80f7,
	'ル': 0x80f8,
	'レ': 0x80f9,
	'ロ': 0x80fa,
	'ワ': 0x80fb,
	'ガ': 0x80fc,
	'ギ': 0x80fd,
	'グ': 0x80fe,
	'ゲ': 0x80ff,
	'ゴ': 0x8180,
	'ザ': 0x8181,
	'ジ': 0x8182,
	'ズ': 0x8183,
	'ゼ': 0x8184,
	'ゾ': 0x8185,
	'ダ': 0x8186,
	'ヂ': 0x8187,
	'ヅ': 0x8188,
	'デ': 0x8189,
	'ド': 0x818a,
	'バ': 0x818b,
	'ビ': 0x818c,
	'ブ': 0x818d,
	'ベ': 0x818e,
	'ボ': 0x818f,
	'パ': 0x8190,
	'ピ': 0x8191,
	'プ': 0x8192,
	'ペ': 0x8193,
	'ポ': 0x8194,
	'ａ': 0x8195,
	'ｂ': 0x8196,
	'ｃ': 0x8197,
	'ｄ': 0x8198,
	'ｅ': 0x8199,
	'ｆ': 0x819a,
	'ｇ': 0x819b,
	'ｈ': 0x819c,
	'ｉ': 0x819d,
	'ｊ': 0x819e,
	'ｋ': 0x819f,
	'ｌ': 0x81a0,
	'ｍ': 0x81a1,
	'ｎ': 0x81a2,
	'ｏ': 0x81a3,
	'ｐ': 0x81a4,
	'ｑ': 0x81a5,
	'ｒ': 0x81a6,
	'ｓ': 0x81a7,
	'ｔ': 0x81a8,
	'ｕ': 0x81a9,
	'ｖ': 0x81aa,
	'ｗ': 0x81ab,
	'ｘ': 0x81ac,
	'ｙ': 0x81ad,
	'ｚ': 0x81ae,
	'ぁ': 0x81af,
	'ぃ': 0x81b0,
	'ぅ': 0x81b1,
	'ぇ': 0x81b2,
	'ぉ': 0x81b3,
	'っ': 0x81b4,
	'ゃ': 0x81b5,
	'ゅ': 0x81b6,
	'ょ': 0x81b7,
	'を': 0x81b8,
	'ん': 0x81b9,
	'あ': 0x81ba,
	'い': 0x81bb,
	'う': 0x81bc,
	'え': 0x81bd,
	'お': 0x81be,
	'か': 0x81bf,
	'き': 0x81c0,
	'く': 0x81c1,
	'け': 0x81c2,
	'こ': 0x81c3,
	'さ': 0x81c4,
	'し': 0x81c5,
	'す': 0x81c6,
	'せ': 0x81c7,
	'そ': 0x81c8,
	'た': 0x81c9,
	'ち': 0x81ca,
	'つ': 0x81cb,
	'て': 0x81cc,
	'と': 0x81cd,
	'な': 0x81ce,
	'に': 0x81cf,
	'ぬ': 0x81d0,
	'ね': 0x81d1,
	'の': 0x81d2,
	'は': 0x81d3,
	'ひ': 0x81d4,
	'ふ': 0x81d5,
	'へ': 0x81d6,
	'ほ': 0x81d7,
	'ま': 0x81d8,
	'み': 0x81d9,
	'む': 0x81da,
	'め': 0x81db,
	'も': 0x81dc,
	'や': 0x81dd,
	'ゆ': 0x81de,
	'よ': 0x81df,
	'ら': 0x81e0,
	'り': 0x81e1,
	'る': 0x81e2,
	'れ': 0x81e3,
	'ろ': 0x81e4,
	'わ': 0x81e5,
	'が': 0x81e6,
	'ぎ': 0x81e7,
	'ぐ': 0x81e8,
	'げ': 0x81e9,
	'ご': 0x81ea,
	'ざ': 0x81eb,
	'じ': 0x81ec,
	'ず': 0x81ed,
	'ぜ': 0x81ee,
	'ぞ': 0x81ef,
	'だ': 0x81f0,
	'ぢ': 0x81f1,
	'づ': 0x81f2,
	'で': 0x81f3,
	'ど': 0x81f4,
	'ば': 0x81f5,
	'び': 0x81f6,
	'ぶ': 0x81f7,
	'べ': 0x81f8,
	'ぼ': 0x81f9,
	'ぱ': 0x81fa,
	'ぴ': 0x81fb,
	'ぷ': 0x81fc,
	'ぺ': 0x81fd,
	'ぽ': 0x81fe,
	'ヴ': 0x81ff,
	'口': 0x8280,
	'工': 0x8281,
	'力': 0x8282,
	'一': 0x8283,
	'ー': 0x8284,
	'々': 0x8285,
	'解': 0x8286,
	'背': 0x8287,
	'景': 0x8288,
	'警': 0x8289,
	'戒': 0x828a,
	'体': 0x828b,
	'制': 0x828c,
	'中': 0x828d,
	'内': 0x828e,
	'部': 0x828f,
	'級': 0x8290,
	'戦': 0x8291,
	'闘': 0x8292,
	'員': 0x8293,
	'配': 0x8294,
	'置': 0x8295,
	'外': 0x8296,
	'敵': 0x8297,
	'地': 0x8298,
	'隊': 0x8299,
	'包': 0x829a,
	'囲': 0x829b,
	'玄': 0x829c,
	'関': 0x829d,
	'脱': 0x829e,
	'出': 0x829f,
	'不': 0x82a0,
	'可': 0x82a1,
	'能': 0x82a2,
	'協': 0x82a3,
	'会': 0x82a4,
	'輸': 0x82a5,
	'送': 0x82a6,
	'君': 0x82a7,
	'救': 0x82a8,
	'言': 0x82a9,
	'何': 0x82aa,
	'身': 0x82ab,
	'守': 0x82ac,
	'最': 0x82ad,
	'優': 0x82ae,
	'先': 0x82af,
	'死': 0x82b0,
	'妨': 0x82b1,
	'害': 0x82b2,
	'幸': 0x82b3,
	'運': 0x82b4,
	'任': 0x82b5,
	'務': 0x82b6,
	'進': 0x82b7,
	'路': 0x82b8,
	'確': 0x82b9,
	'保': 0x82ba,
	'付': 0x82bb,
	'近': 0x82bc,
	'階': 0x82bd,
	'続': 0x82be,
	'共': 0x82bf,
	'乗': 0x82c0,
	'込': 0x82c1,
	'再': 0x82c2,
	'起': 0x82c3,
	'動': 0x82c4,
	'途': 0x82c5,
	'番': 0x82c6,
	'認': 0x82c7,
	'発': 0x82c8,
	'見': 0x82c9,
	'変': 0x82ca,
	'更': 0x82cb,
	'武': 0x82cc,
	'装': 0x82cd,
	'破': 0x82ce,
	'壊': 0x82cf,
	'周': 0x82d0,
	'旋': 0x82d1,
	'回': 0x82d2,
	'当': 0x82d3,
	'方': 0x82d4,
	'持': 0x82d5,
	'狙': 0x82d6,
	'撃': 0x82d7,
	'落': 0x82d8,
	'倒': 0x82d9,
	'行': 0x82da,
	'彼': 0x82db,
	'女': 0x82dc,
	'手': 0x82dd,
	'避': 0x82de,
	'激': 0x82df,
	'銃': 0x82e0,
	'覚': 0x82e1,
	'悟': 0x82e2,
	'戻': 0x82e3,
	'我': 0x82e4,
	'派': 0x82e5,
	'既': 0x82e6,
	'待': 0x82e7,
	'忘': 0x82e8,
	'管': 0x82e9,
	'理': 0x82ea,
	'照': 0x82eb,
	'明': 0x82ec,
	'攻': 0x82ed,
	'受': 0x82ee,
	'余': 0x82ef,
	'計': 0x82f0,
	'失': 0x82f1,
	'敗': 0x82f2,
	'完': 0x82f3,
	'了': 0x82f4,
	'告': 0x82f5,
	'入': 0x82f6,
	'嬢': 0x82f7,
	'除': 0x82f8,
	'使': 0x82f9,
	'貸': 0x82fa,
	'絶': 0x82fb,
	'対': 0x82fc,
	'間': 0x82fd,
	'違': 0x82fe,
	'速': 0x82ff,
	'遅': 0x8380,
	'遂': 0x8381,
	'欠': 0x8382,
	'要': 0x8383,
	'素': 0x8384,
	'全': 0x8385,
	'向': 0x8386,
	'必': 0x8387,
	'用': 0x8388,
	'逃': 0x8389,
	'場': 0x838a,
	'以': 0x838b,
	'早': 0x838c,
	'急': 0x838d,
	'備': 0x838e,
	'兵': 0x838f,
	'来': 0x8390,
	'消': 0x8391,
	'灯': 0x8392,
	'時': 0x8393,
	'私': 0x8394,
	'今': 0x8395,
	'返': 0x8396,
	'自': 0x8397,
	'分': 0x8398,
	'働': 0x8399,
	'悪': 0x839a,
	'取': 0x839b,
	'画': 0x839c,
	'前': 0x839d,
	'誰': 0x839e,
	'話': 0x839f,
	'後': 0x83a0,
	'映': 0x83a1,
	'像': 0x83a2,
	'才': 0x83a3,
	'信': 0x83a4,
	'得': 0x83a5,
	'経': 0x83a6,
	'験': 0x83a7,
	'生': 0x83a8,
	'組': 0x83a9,
	'並': 0x83aa,
	'程': 0x83ab,
	'度': 0x83ac,
	'油': 0x83ad,
	'断': 0x83ae,
	'禁': 0x83af,
	'物': 0x83b0,
	'成': 0x83b1,
	'績': 0x83b2,
	'相': 0x83b3,
	'意': 0x83b4,
	'気': 0x83b5,
	'政': 0x83b6,
	'府': 0x83b7,
	'非': 0x83b8,
	'常': 0x83b9,
	'強': 0x83ba,
	'恐': 0x83bb,
	'無': 0x83bc,
	'決': 0x83bd,
	'勝': 0x83be,
	'努': 0x83bf,
	'末': 0x83c0,
	'飛': 0x83c1,
	'機': 0x83c2,
	'空': 0x83c3,
	'衝': 0x83c4,
	'突': 0x83c5,
	'大': 0x83c6,
	'統': 0x83c7,
	'領': 0x83c8,
	'電': 0x83c9,
	'波': 0x83ca,
	'助': 0x83cb,
	'墜': 0x83cc,
	'現': 0x83cd,
	'点': 0x83ce,
	'通': 0x83cf,
	'段': 0x83d0,
	'的': 0x83d1,
	'源': 0x83d2,
	'安': 0x83d3,
	'重': 0x83d4,
	'収': 0x83d5,
	'健': 0x83d6,
	'康': 0x83d7,
	'状': 0x83d8,
	'態': 0x83d9,
	'号': 0x83da,
	'作': 0x83db,
	'効': 0x83dc,
	'果': 0x83dd,
	'高': 0x83de,
	'性': 0x83df,
	'流': 0x83e0,
	'有': 0x83e1,
	'利': 0x83e2,
	'次': 0x83e3,
	'第': 0x83e4,
	'直': 0x83e5,
	'居': 0x83e6,
	'所': 0x83e7,
	'排': 0x83e8,
	'命': 0x83e9,
	'反': 0x83ea,
	'応': 0x83eb,
	'辺': 0x83ec,
	'偽': 0x83ed,
	'者': 0x83ee,
	'脅': 0x83ef,
	'威': 0x83f0,
	'援': 0x83f1,
	'到': 0x83f2,
	'着': 0x83f3,
	'危': 0x83f4,
	'険': 0x83f5,
	'去': 0x83f6,
	'護': 0x83f7,
	'衛': 0x83f8,
	'船': 0x83f9,
	'面': 0x83fa,
	'役': 0x83fb,
	'立': 0x83fc,
	'答': 0x83fd,
	'聞': 0x83fe,
	'別': 0x83ff,
	'探': 0x8480,
	'事': 0x8481,
	'調': 0x8482,
	'子': 0x8483,
	'復': 0x8484,
	'野': 0x8485,
	'心': 0x8486,
	'家': 0x8487,
	'教': 0x8488,
	'深': 0x8489,
	'海': 0x848a,
	'査': 0x848b,
	'艇': 0x848c,
	'潜': 0x848d,
	'水': 0x848e,
	'業': 0x848f,
	'世': 0x8490,
	'界': 0x8491,
	'唯': 0x8492,
	'社': 0x8493,
	'与': 0x8494,
	'圧': 0x8495,
	'切': 0x8496,
	'目': 0x8497,
	'山': 0x8498,
	'金': 0x8499,
	'髪': 0x849a,
	'服': 0x849b,
	'男': 0x849c,
	'国': 0x849d,
	'防': 0x849e,
	'省': 0x849f,
	'司': 0x84a0,
	'令': 0x84a1,
	'官': 0x84a2,
	'訪': 0x84a3,
	'問': 0x84a4,
	'準': 0x84a5,
	'軍': 0x84a6,
	'基': 0x84a7,
	'移': 0x84a8,
	'穏': 0x84a9,
	'思': 0x84aa,
	'阻': 0x84ab,
	'止': 0x84ac,
	'特': 0x84ad,
	'注': 0x84ae,
	'望': 0x84af,
	'係': 0x84b0,
	'人': 0x84b1,
	'側': 0x84b2,
	'味': 0x84b3,
	'標': 0x84b4,
	'長': 0x84b5,
	'功': 0x84b6,
	'本': 0x84b7,
	'日': 0x84b8,
	'専': 0x84b9,
	'眠': 0x84ba,
	'品': 0x84bb,
	'積': 0x84bc,
	'器': 0x84bd,
	'怪': 0x84be,
	'荷': 0x84bf,
	'載': 0x84c0,
	'納': 0x84c1,
	'検': 0x84c2,
	'策': 0x84c3,
	'預': 0x84c4,
	'知': 0x84c5,
	'予': 0x84c6,
	'定': 0x84c7,
	'航': 0x84c8,
	'図': 0x84c9,
	'庫': 0x84ca,
	'搭': 0x84cb,
	'離': 0x84cc,
	'陸': 0x84cd,
	'合': 0x84ce,
	'法': 0x84cf,
	'考': 0x84d0,
	'侵': 0x84d1,
	'民': 0x84d2,
	'丈': 0x84d3,
	'夫': 0x84d4,
	'呼': 0x84d5,
	'存': 0x84d6,
	'開': 0x84d7,
	'始': 0x84d8,
	'新': 0x84d9,
	'拒': 0x84da,
	'否': 0x84db,
	'多': 0x84dc,
	'犠': 0x84dd,
	'牲': 0x84de,
	'奪': 0x84df,
	'小': 0x84e0,
	'偵': 0x84e1,
	'察': 0x84e2,
	'連': 0x84e3,
	'伝': 0x84e4,
	'加': 0x84e5,
	'担': 0x84e6,
	'裏': 0x84e7,
	'証': 0x84e8,
	'拠': 0x84e9,
	'誘': 0x84ea,
	'拐': 0x84eb,
	'情': 0x84ec,
	'報': 0x84ed,
	'推': 0x84ee,
	'測': 0x84ef,
	'停': 0x84f0,
	'暴': 0x84f1,
	'挙': 0x84f2,
	'母': 0x84f3,
	'太': 0x84f4,
	'平': 0x84f5,
	'洋': 0x84f6,
	'同': 0x84f7,
	'底': 0x84f8,
	'限': 0x84f9,
	'広': 0x84fa,
	'範': 0x84fb,
	'渡': 0x84fc,
	'被': 0x84fd,
	'稼': 0x84fe,
	'研': 0x84ff,
	'究': 0x8580,
	'室': 0x8581,
	'占': 0x8582,
	'集': 0x8583,
	'実': 0x8584,
	'科': 0x8585,
	'学': 0x8586,
	'技': 0x8587,
	'術': 0x8588,
	'操': 0x8589,
	'縦': 0x858a,
	'片': 0x858b,
	'遠': 0x858c,
	'隔': 0x858d,
	'格': 0x858e,
	'璧': 0x858f,
	'閉': 0x8590,
	'殺': 0x8591,
	'引': 0x8592,
	'央': 0x8593,
	'様': 0x8594,
	'記': 0x8595,
	'録': 0x8596,
	'車': 0x8597,
	'張': 0x8598,
	'道': 0x8599,
	'陰': 0x859a,
	'謀': 0x859b,
	'絡': 0x859c,
	'暗': 0x859d,
	'読': 0x859e,
	'総': 0x859f,
	'正': 0x85a0,
	'複': 0x85a1,
	'雑': 0x85a2,
	'爆': 0x85a3,
	'弾': 0x85a4,
	'率': 0x85a5,
	'化': 0x85a6,
	'想': 0x85a7,
	'難': 0x85a8,
	'許': 0x85a9,
	'過': 0x85aa,
	'少': 0x85ab,
	'評': 0x85ac,
	'価': 0x85ad,
	'奥': 0x85ae,
	'細': 0x85af,
	'胞': 0x85b0,
	'済': 0x85b1,
	'線': 0x85b2,
	'転': 0x85b3,
	'米': 0x85b4,
	'秘': 0x85b5,
	'密': 0x85b6,
	'射': 0x85b7,
	'迎': 0x85b8,
	'残': 0x85b9,
	'骸': 0x85ba,
	'頼': 0x85bb,
	'名': 0x85bc,
	'夜': 0x85bd,
	'欲': 0x85be,
	'請': 0x85bf,
	'疑': 0x85c0,
	'感': 0x85c1,
	'抗': 0x85c2,
	'議': 0x85c3,
	'監': 0x85c4,
	'磁': 0x85c5,
	'十': 0x85c6,
	'放': 0x85c7,
	'位': 0x85c8,
	'改': 0x85c9,
	'造': 0x85ca,
	'掃': 0x85cb,
	'棟': 0x85cc,
	'帰': 0x85cd,
	'械': 0x85ce,
	'音': 0x85cf,
	'端': 0x85d0,
	'接': 0x85d1,
	'抜': 0x85d2,
	'倉': 0x85d3,
	'仕': 0x85d4,
	'貴': 0x85d5,
	'荘': 0x85d6,
	'滞': 0x85d7,
	'在': 0x85d8,
	'襲': 0x85d9,
	'質': 0x85da,
	'捕': 0x85db,
	'届': 0x85dc,
	'惜': 0x85dd,
	'隠': 0x85de,
	'屋': 0x85df,
	'根': 0x85e0,
	'迫': 0x85e1,
	'風': 0x85e2,
	'主': 0x85e3,
	'試': 0x85e4,
	'容': 0x85e5,
	'易': 0x85e6,
	'為': 0x85e7,
	'損': 0x85e8,
	'降': 0x85e9,
	'伏': 0x85ea,
	'吐': 0x85eb,
	'交': 0x85ec,
	'渉': 0x85ed,
	'冷': 0x85ee,
	'却': 0x85ef,
	'供': 0x85f0,
	'給': 0x85f1,
	'昨': 0x85f2,
	'換': 0x85f3,
	'求': 0x85f4,
	'念': 0x85f5,
	'緒': 0x85f6,
	'責': 0x85f7,
	'際': 0x85f8,
	'然': 0x85f9,
	'題': 0x85fa,
	'説': 0x85fb,
	'登': 0x85fc,
	'士': 0x85fd,
	'弱': 0x85fe,
	'陣': 0x85ff,
	'遺': 0x8680,
	'跡': 0x8681,
	'寺': 0x8682,
	'院': 0x8683,
	'系': 0x8684,
	'神': 0x8685,
	'殿': 0x8686,
	'施': 0x8687,
	'設': 0x8688,
	'闇': 0x8689,
	'初': 0x868a,
	'犯': 0x868b,
	'揮': 0x868c,
	'雷': 0x868d,
	'歩': 0x868e,
	'席': 0x868f,
	'緊': 0x8690,
	'年': 0x8691,
	'月': 0x8692,
	'娘': 0x8693,
	'良': 0x8694,
	'悔': 0x8695,
	'減': 0x8696,
	'示': 0x8697,
	'他': 0x8698,
	'亡': 0x8699,
	'述': 0x869a,
	'極': 0x869b,
	'低': 0x869c,
	'温': 0x869d,
	'剖': 0x869e,
	'凍': 0x869f,
	'医': 0x86a0,
	'故': 0x86a1,
	'処': 0x86a2,
	'繰': 0x86a3,
	'昇': 0x86a4,
	'還': 0x86a5,
	'異': 0x86a6,
	'壁': 0x86a7,
	'薬': 0x86a8,
	'静': 0x86a9,
	'恵': 0x86aa,
	'葉': 0x86ab,
	'超': 0x86ac,
	'盗': 0x86ad,
	'聴': 0x86ae,
	'困': 0x86af,
	'投': 0x86b0,
	'好': 0x86b1,
	'識': 0x86b2,
	'終': 0x86b3,
	'判': 0x86b4,
	'未': 0x86b5,
	'和': 0x86b6,
	'御': 0x86b7,
	'軟': 0x86b8,
	'執': 0x86b9,
	'王': 0x86ba,
	'苦': 0x86bb,
	'労': 0x86bc,
	'党': 0x86bd,
	'短': 0x86be,
	'個': 0x86bf,
	'角': 0x86c0,
	'曲': 0x86c1,
	'選': 0x86c2,
	'択': 0x86c3,
	'追': 0x86c4,
	'元': 0x86c5,
	'鉱': 0x86c6,
	'数': 0x86c7,
	'頭': 0x86c8,
	'距': 0x86c9,
	'獲': 0x86ca,
	'賞': 0x86cb,
	'打': 0x86cc,
	'称': 0x86cd,
	'況': 0x86ce,
	'罪': 0x86cf,
	'書': 0x86d0,
	'視': 0x86d1,
	'逆': 0x86d2,
	'表': 0x86d3,
	'替': 0x86d4,
	'両': 0x86d5,
	'齢': 0x86d6,
	'種': 0x86d7,
	'族': 0x86d8,
	'結': 0x86d9,
	'足': 0x86da,
	'秒': 0x86db,
	'黄': 0x86dc,
	'修': 0x86dd,
	'恥': 0x86de,
	'字': 0x86df,
	'幕': 0x86e0,
	'割': 0x86e1,
	'棄': 0x86e2,
	'押': 0x86e3,
	'球': 0x86e4,
	'提': 0x86e5,
	'拡': 0x86e6,
	'索': 0x86e7,
	'撮': 0x86e8,
	'露': 0x86e9,
	'宇': 0x86ea,
	'宙': 0x86eb,
	'横': 0x86ec,
	'須': 0x86ed,
	'辞': 0x86ee,
	'退': 0x86ef,
	'胴': 0x86f0,
	'序': 0x86f1,
	'火': 0x86f2,
	'雪': 0x86f3,
	'塞': 0x86f4,
	'焼': 0x86f5,
	'原': 0x86f6,
	'滅': 0x86f7,
	'星': 0x86f8,
	'嵐': 0x86f9,
	'巨': 0x86fa,
	'析': 0x86fb,
	'建': 0x86fc,
	'昔': 0x86fd,
	'核': 0x86fe,
	'形': 0x86ff,
	'論': 0x8780,
	'街': 0x8781,
	'般': 0x8782,
	'市': 0x8783,
	'訓': 0x8784,
	'練': 0x8785,
	'満': 0x8786,
	'陽': 0x8787,
	'互': 0x8788,
	'単': 0x8789,
	'仮': 0x878a,
	'鎮': 0x878b,
	'剤': 0x878c,
	'矢': 0x878d,
	'例': 0x878e,
	'丸': 0x878f,
	'詳': 0x8790,
	'案': 0x8791,
	'産': 0x8792,
	'件': 0x8793,
	'惑': 0x8794,
	'適': 0x8795,
	'療': 0x8796,
	'匹': 0x8797,
	'培': 0x8798,
	'養': 0x8799,
	'環': 0x879a,
	'境': 0x879b,
	'資': 0x879c,
	'染': 0x879d,
	'製': 0x879e,
	'倍': 0x879f,
	'美': 0x87a0,
	'維': 0x87a1,
	'刃': 0x87a2,
	'指': 0x87a3,
	'普': 0x87a4,
	'均': 0x87a5,
	'刺': 0x87a6,
	'透': 0x87a7,
	'型': 0x87a8,
	'便': 0x87a9,
	'量': 0x87aa,
	'走': 0x87ab,
	'光': 0x87ac,
	'悲': 0x87ad,
	'貫': 0x87ae,
	'振': 0x87af,
	'差': 0x87b0,
	'影': 0x87b1,
	'姿': 0x87b2,
	'由': 0x87b3,
	'各': 0x87b4,
	'版': 0x87b5,
	'式': 0x87b6,
	'砂': 0x87b7,
	'尖': 0x87b8,
	'塔': 0x87b9,
	'聖': 0x87ba,
	'谷': 0x87bb,
	'怒': 0x87bc,
	'扱': 0x87bd,
	'権': 0x87be,
	'白': 0x87bf,
	'類': 0x87c0,
	'沈': 0x87c1,
	'争': 0x87c2,
	'活': 0x87c3,
	'仲': 0x87c4,
	'熱': 0x87c5,
	'都': 0x87c6,
	'古': 0x87c7,
	'代': 0x87c8,
	'赤': 0x87c9,
	'黒': 0x87ca,
	'上': 0x87cb,
	'下': 0x87cc,
	'左': 0x87cd,
	'右': 0x87ce,
}

main()
